<?php
namespace app\common\model;

use think\Model;
use util\Log;

class Base extends Model
{

    protected $x; //用于链式操作返回的结果

    // 模型初始化
    protected static function init()
    {
        //TODO:初始化内容
    }

    /**
     * tp框架通用数据查询方式
     * @param $map //包含各种链式操作的参数
     * @return array|false|\PDOStatement|string|\think\Collection|Model
     */
    public function baseSelect($map)
    {
        try {
            if (empty($map)) {
                $result = $this->select();
            } else {
                //条件
                $this->x = $this->where($map['where']);
                //需要查询的字段
                if (!empty($map['field'])) {
                    $this->x = $this->x->field($map['field']);
                }
                //是否分页
                if (!empty($map['page'])) {
                    $this->x = $this->x->page($map['page']['pageIndex'], $map['page']['pageSize']);
                }
                //是否分组
                if (!empty($map['group'])) {
                    $this->x = $this->x->group($map['group']);
                }
                //是否排序
                if (!empty($map['order'])) {
                    $this->x = $this->x->order($map['order']);
                }
                //查询多条还是一条数据
                if (!empty($map['unique'])) {
                    $result = $this->x->find();
                } else {
                    $result = $this->x->select();
                }
            }
            return $result;
        } catch (\Exception $e) {
            Log::error('tp框架通用数据查询方式出现错误，位置 common/model/Base/baseSelect,出错原因:' . $e->getMessage());
            return -1;
        }
    }

    /**
     * 通用统计总数据方法
     * @param $map //参数条件
     * @return int|string
     */
    public function baseSelectCount($map)
    {
        try {
            $result = $this->where($map)->count();
            return $result;
        } catch (\Exception $e) {
            Log::error('通用统计总数据方法出现错误，位置 common/model/Base/baseSelectCount,出错原因:' . $e->getMessage());
            return -1;
        }
    }

    /**
     * 通用新增方法
     * @param $data //新增的数据
     * @param null $all  //是否插入多条数据
     * @return int|string
     */
    public function baseInsert($data, $all = null)
    {
        try {
            if (!empty($all)) {
                $result = $this->saveAll($data);
            } else {
                $result = $this->save($data);
            }
            return $result;
        } catch (\Exception $e) {
            Log::error('通用新增方法出现错误，位置 common/model/Base/baseInsert,出错原因:' . $e->getMessage());
            return -1;
        }
    }

    /**
     * 通用修改方法
     * @param $data  //修改的数据
     * @param null $k  //需要删除数据的的主键字段
     * @return false|int
     */
    public function baseEdit($data, $k = null)
    {
        try {
            if (!empty($k)) {
                $result = $this->save($data, [$k => $data[$k]]);
            } else {
                $result = $this->save($data, ['id' => $data['id']]);
            }
            return $result;
        } catch (\Exception $e) {
            Log::error('通用修改方法出现错误，位置 common/model/Base/baseEdit,出错原因:' . $e->getMessage());
            return -1;
        }
    }

    /**
     * 通用删除方法
     * @param $id //数据值
     * @param null $k //需要删除数据的的主键字段
     * @return int
     */
    public function baseDelete($id, $k = null)
    {
        try {
            if (!empty($k)) {
                $result = $this->where($k, $id)->delete();
            } else {
                $result = $this->where('id', $id)->delete();
            }
            return $result;
        } catch (\Exception $e) {
            Log::error('通用删除方法出现错误，位置 common/model/Base/BaseEdit,出错原因:' . $e->getMessage());
            return -1;
        }
    }

}
